home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / program / misc / obrn-a_1.lha / oberon-a / src_upd1.lha / source / oc / OCPrefsGUI.mod < prev    next >
Text File  |  1995-07-14  |  43KB  |  1,383 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: OCPrefsGUI.mod $
  4.   Description: Implements a GUI for OCPrefs using EAGUI.library.
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 2.3 $
  8.       $Author: fjc $
  9.         $Date: 1995/07/14 13:12:06 $
  10.  
  11.   Copyright © 1995, Frank Copeland
  12.   This module forms part of the OC program
  13.   See OCPrefs.doc for conditions of use and distribution
  14.  
  15.   Log entries are at the end of the file.
  16.  
  17. *************************************************************************)
  18.  
  19. <* STANDARD- *> <* MAIN- *>
  20.  
  21. MODULE OCPrefsGUI;
  22.  
  23. IMPORT
  24.   SYS := SYSTEM, Kernel, Errors, str := Strings, s := Sets, e := Exec,
  25.   es := ExecSupport, eu := ExecUtil, u := Utility, d := Dos,
  26.   gfx := Graphics, i := Intuition, gt := GadTools, df := DiskFont,
  27.   ea := EAGUI, eam := EAGUI_Macros, spt := EASupport, lbl := EALabels,
  28.   frm := EAFrames, ead := EADialogs, OCPrefsRev, OCM,
  29.   cat := OCPrefsStrings, Events, ASL, wb := Workbench, du := DosUtil,
  30.   Icon;
  31.  
  32. (* ---------------------------------- *)
  33.  
  34. CONST
  35.  
  36.   (* Gadget IDs *)
  37.  
  38.   PrefsFileID  = 0;
  39.   PathID       = 1;
  40.   PathStrID    = 2;
  41.   DeleteID     = 3;
  42.   SymPathID    = 4;
  43.   SymExtID     = 5;
  44.   ObjPathID    = 6;
  45.   ObjExtID     = 7;
  46.   ErrPathID    = 8;
  47.   ErrExtID     = 9;
  48.   SetNamesID   = 10;
  49.   ClearNamesID = 11;
  50.   CodeSizeID   = 12;
  51.   ConstSizeID  = 13;
  52.  
  53.   VerboseID    = 14;
  54.   MakeIconsID  = 15;
  55.  
  56.   NumGadgets1  = 16;
  57.  
  58.   StandardID   =  0;
  59.   InitialiseID =  1;
  60.   MainID       =  2;
  61.   WarningsID   =  3;
  62.   RegisterID   =  4;
  63.   DebugID      =  5;
  64.   SmallCodeID  =  6;
  65.   SmallDataID  =  7;
  66.   ResidentID   =  8;
  67.  
  68.   TypeChkID    =  9;
  69.   OvflChkID    = 10;
  70.   IndexChkID   = 11;
  71.   RangeChkID   = 12;
  72.   CaseChkID    = 13;
  73.   NilChkID     = 14;
  74.   ReturnChkID  = 15;
  75.   StackChkID   = 16;
  76.   AssertChkID  = 17;
  77.   LongVarsID   = 18;
  78.   ClearVarsID  = 19;
  79.  
  80.   NumGadgets2  = 20;
  81.  
  82.   BrowseID     = 101;
  83.   AboutID      = 102;
  84.   SaveID       = 103;
  85.   SaveAsID     = 104;
  86.   QuitID       = 105;
  87.   AddID        = 106;
  88.   MoreID       = 107;
  89.   AcceptID     = 108;
  90.   CancelID     = 109;
  91.  
  92. (* ---------------------------------- *)
  93.  
  94. TYPE
  95.  
  96.   SettingsDialog = POINTER TO SettingsDialogRec;
  97.   OptionsDialog = POINTER TO OptionsDialogRec;
  98.  
  99.   SettingsDialogRec = RECORD (ead.EADialogRec)
  100.     label : ARRAY 6 OF lbl.Label;
  101.     frame : ARRAY 6 OF frm.Frame;
  102.     gadget : ARRAY NumGadgets1 OF i.GadgetPtr;
  103.     pathLabels : e.ListPtr;
  104.     selectedPath : INTEGER;
  105.     optionsDlg : OptionsDialog;
  106.   END; (* SettingsDialogRec *)
  107.  
  108.   OptionsDialogRec = RECORD (ead.EADialogRec)
  109.     label : ARRAY 2 OF lbl.Label;
  110.     frame : ARRAY 2 OF frm.Frame;
  111.     gadget : ARRAY NumGadgets2 OF i.GadgetPtr;
  112.   END; (* OptionsDialogRec *)
  113.  
  114. (* ---------------------------------- *)
  115.  
  116. VAR
  117.  
  118.   scr : i.ScreenPtr;
  119.   visualInfo : gt.VisualInfo;
  120.   drawInfo : i.DrawInfoPtr;
  121.   textFont : gfx.TextFontPtr;
  122.   textAttr : ARRAY 2 OF gfx.TextAttr;
  123.   settingsDlg : SettingsDialog;
  124.   hSpace, vSpace : LONGINT;
  125.   tags1, tags2 : ARRAY 2 OF u.TagItem;
  126.  
  127.  
  128. (* ---------------------------------- *)
  129. PROCEDURE Notice* ( msg : LONGINT );
  130.  
  131.   VAR es : i.EasyStruct; text : e.LSTRPTR;
  132.  
  133.   BEGIN (* Notice *)
  134.     es.structSize := SIZE (i.EasyStruct);
  135.     es.flags := {};
  136.     es.title := cat.GetString (cat.gui1);
  137.     es.gadgetFormat := cat.GetString (cat.gui2);
  138.     es.textFormat := SYS.ADR ("%s");
  139.     text := cat.GetString (msg);
  140.     IF i.EasyRequest ( NIL, SYS.ADR (es), NIL, text ) = 0
  141.     THEN
  142.     END
  143.   END Notice;
  144.  
  145. (* ---------------------------------- *)
  146. PROCEDURE Notice1* ( fmt : LONGINT; msg : ARRAY OF CHAR );
  147.  
  148.   VAR es : i.EasyStruct; text : e.LSTRPTR;
  149.  
  150.   <*$CopyArrays-*>
  151.   BEGIN (* Notice1 *)
  152.     es.structSize := SIZE (i.EasyStruct);
  153.     es.flags := {};
  154.     es.title := cat.GetString (cat.gui1);
  155.     es.gadgetFormat := cat.GetString (cat.gui2);
  156.     es.textFormat := cat.GetString (fmt);
  157.     IF i.EasyRequest ( NIL, SYS.ADR (es), NIL, SYS.ADR (msg) ) = 0
  158.     THEN
  159.     END
  160.   END Notice1;
  161.  
  162. (* ---------------------------------- *)
  163. PROCEDURE RequestFile
  164.   ( window     : i.WindowPtr;
  165.     title      : ARRAY OF CHAR;
  166.     pattern    : ARRAY OF CHAR;
  167.     VAR drawer : ARRAY OF CHAR;
  168.     VAR file   : ARRAY OF CHAR;
  169.     save       : BOOLEAN )
  170.   : BOOLEAN;
  171.  
  172.   VAR
  173.     fr : ASL.FileRequesterPtr;
  174.     flags : s.SET32;
  175.     result : BOOLEAN;
  176.  
  177.   <*$CopyArrays-*>
  178.   BEGIN (* RequestFile *)
  179.     IF save THEN flags := {ASL.frDoPatterns, ASL.frDoSaveMode}
  180.     ELSE flags := {ASL.frDoPatterns}
  181.     END;
  182.     fr := SYS.VAL (ASL.FileRequesterPtr,
  183.       ASL.AllocAslRequestTags ( ASL.fileRequest,
  184.           ASL.window,         window,
  185.           ASL.titleText,      SYS.ADR (title),
  186.           ASL.initialDrawer,  SYS.ADR (drawer),
  187.           ASL.initialFile,    SYS.ADR (file),
  188.           ASL.initialPattern, SYS.ADR (pattern),
  189.           ASL.flags1,         flags,
  190.           ASL.flags2,         {ASL.frRejectIcons},
  191.           u.end ));
  192.     IF fr # NIL THEN
  193.       result := ASL.AslRequestTags (fr, u.end);
  194.       IF result THEN
  195.         COPY (fr.drawer^, drawer);
  196.         COPY (fr.file^, file)
  197.       END;
  198.       ASL.FreeAslRequest (fr)
  199.     ELSE
  200.       result := FALSE
  201.     END;
  202.  
  203.     RETURN result
  204.   END RequestFile;
  205.  
  206. (*------------------------------------*)
  207. PROCEDURE MakeIcon ( file : ARRAY OF CHAR );
  208.  
  209.   CONST defPrefsIcon = "def_prefs";
  210.  
  211.   VAR
  212.     icon    : ARRAY 256 OF CHAR;
  213.     diskObj : wb.DiskObjectPtr;
  214.     oldTool : e.LSTRPTR;
  215.  
  216.   <*$CopyArrays-*>
  217.   BEGIN (* MakeIcon *)
  218.     ASSERT (Icon.base # NIL, 100);
  219.     COPY (file, icon); str.Append (".info", icon);
  220.     IF ~du.FileExists (icon) THEN
  221.       diskObj := Icon.GetDiskObject ("ENV:OCPrefs/def_prefs");
  222.       IF diskObj = NIL THEN
  223.         diskObj := Icon.GetDefDiskObject (wb.project)
  224.       END;
  225.       IF diskObj # NIL THEN
  226.         oldTool := diskObj.defaultTool;
  227.         diskObj.defaultTool := SYS.ADR ("OCPrefs");
  228.         diskObj.currentX := wb.noIconPosition;
  229.         diskObj.currentY := wb.noIconPosition;
  230.         IF ~Icon.PutDiskObject (file, diskObj) THEN
  231.           Notice1 (cat.gui42, icon)
  232.         END;
  233.         diskObj.defaultTool := oldTool;
  234.         Icon.FreeDiskObject (diskObj)
  235.       ELSE
  236.         Notice (cat.gui43)
  237.       END
  238.     END
  239.   END MakeIcon;
  240.  
  241. (* ---------------------------------- *)
  242. PROCEDURE (dlg : SettingsDialog) SetAttrs;
  243.  
  244.   VAR node : e.NodePtr; label : e.LSTRPTR; x : INTEGER;
  245.  
  246.   BEGIN (* SetAttrs *)
  247.     gt.SetGadgetAttrs ( dlg.gadget[PrefsFileID]^, dlg.win, NIL,
  248.         gt.txText, SYS.ADR (OCM.PrefsFile),
  249.         u.done );
  250.  
  251.     gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  252.         gt.lvLabels, NIL,
  253.         u.done );
  254.     IF dlg.pathLabels = NIL THEN
  255.       NEW (dlg.pathLabels);
  256.       es.NewList (dlg.pathLabels^)
  257.     ELSE
  258.       LOOP
  259.         node := SYS.VAL (e.NodePtr, e.RemHead (dlg.pathLabels^));
  260.         IF node = NIL THEN EXIT END;
  261.         SYS.DISPOSE (node.name);
  262.         SYS.DISPOSE (node)
  263.       END
  264.     END;
  265.     FOR x := 0 TO OCM.pathx - 1 DO
  266.       SYS.NEW (label, str.Length (OCM.searchPath[x]^) + 1);
  267.       COPY (OCM.searchPath[x]^, label^);
  268.       NEW (node); node.name := label;
  269.       e.AddTail (dlg.pathLabels^, node)
  270.     END;
  271.     gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  272.         gt.lvLabels, dlg.pathLabels,
  273.         gt.lvTop,    0,
  274.         u.done );
  275.  
  276.     gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  277.         gt.stString,   NIL,
  278.         i.gaDisabled, TRUE,
  279.         u.done );
  280.     dlg.selectedPath := -1;
  281.  
  282.     gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  283.         i.gaDisabled, TRUE,
  284.         u.done );
  285.  
  286.     gt.SetGadgetAttrs ( dlg.gadget[SymPathID]^, dlg.win, NIL,
  287.         gt.stString, SYS.ADR (OCM.SymPath),
  288.         u.done );
  289.     gt.SetGadgetAttrs ( dlg.gadget[SymExtID]^, dlg.win, NIL,
  290.         gt.stString, SYS.ADR (OCM.SymExt),
  291.         u.done );
  292.     gt.SetGadgetAttrs ( dlg.gadget[ObjPathID]^, dlg.win, NIL,
  293.         gt.stString, SYS.ADR (OCM.ObjPath),
  294.         u.done );
  295.     gt.SetGadgetAttrs ( dlg.gadget[ObjExtID]^, dlg.win, NIL,
  296.         gt.stString, SYS.ADR (OCM.ObjExt),
  297.         u.done );
  298.     gt.SetGadgetAttrs ( dlg.gadget[ErrPathID]^, dlg.win, NIL,
  299.         gt.stString, SYS.ADR (OCM.ErrPath),
  300.         u.done );
  301.     gt.SetGadgetAttrs ( dlg.gadget[ErrExtID]^, dlg.win, NIL,
  302.         gt.stString, SYS.ADR (OCM.ErrExt),
  303.         u.done );
  304.  
  305.     gt.SetGadgetAttrs ( dlg.gadget[VerboseID]^, dlg.win, NIL,
  306.         gt.cbChecked, OCM.Verbose,
  307.         u.done );
  308.     gt.SetGadgetAttrs ( dlg.gadget[MakeIconsID]^, dlg.win, NIL,
  309.         gt.cbChecked, OCM.MakeIcons,
  310.         u.done );
  311.  
  312.     gt.SetGadgetAttrs ( dlg.gadget[SetNamesID]^, dlg.win, NIL,
  313.         gt.stString, SYS.ADR (OCM.SetNames),
  314.         u.done );
  315.     gt.SetGadgetAttrs ( dlg.gadget[ClearNamesID]^, dlg.win, NIL,
  316.         gt.stString, SYS.ADR (OCM.ClearNames),
  317.         u.done );
  318.     gt.SetGadgetAttrs ( dlg.gadget[CodeSizeID]^, dlg.win, NIL,
  319.         gt.inNumber, OCM.CodeSize,
  320.         u.done );
  321.     gt.SetGadgetAttrs ( dlg.gadget[ConstSizeID]^, dlg.win, NIL,
  322.         gt.inNumber, OCM.ConstSize,
  323.         u.done );
  324.   END SetAttrs;
  325.  
  326. (* ---------------------------------- *)
  327. PROCEDURE (dlg : OptionsDialog) SetAttrs;
  328.  
  329.   BEGIN (* SetAttrs *)
  330.     gt.SetGadgetAttrs ( dlg.gadget[StandardID]^, dlg.win, NIL,
  331.         gt.cbChecked, OCM.Standard,
  332.         u.done );
  333.     gt.SetGadgetAttrs ( dlg.gadget[InitialiseID]^, dlg.win, NIL,
  334.         gt.cbChecked, OCM.Initialise,
  335.         u.done );
  336.     gt.SetGadgetAttrs ( dlg.gadget[MainID]^, dlg.win, NIL,
  337.         gt.cbChecked, OCM.Main,
  338.         u.done );
  339.     gt.SetGadgetAttrs ( dlg.gadget[WarningsID]^, dlg.win, NIL,
  340.         gt.cbChecked, OCM.Warnings,
  341.         u.done );
  342.     gt.SetGadgetAttrs ( dlg.gadget[RegisterID]^, dlg.win, NIL,
  343.         gt.cbChecked, OCM.Register,
  344.         u.done );
  345.     gt.SetGadgetAttrs ( dlg.gadget[DebugID]^, dlg.win, NIL,
  346.         gt.cbChecked, OCM.Debug,
  347.         u.done );
  348.     gt.SetGadgetAttrs ( dlg.gadget[SmallCodeID]^, dlg.win, NIL,
  349.         gt.cbChecked, OCM.SmallCode,
  350.         u.done );
  351.     gt.SetGadgetAttrs ( dlg.gadget[SmallDataID]^, dlg.win, NIL,
  352.         gt.cbChecked, OCM.SmallData,
  353.         u.done );
  354.     gt.SetGadgetAttrs ( dlg.gadget[ResidentID]^, dlg.win, NIL,
  355.         gt.cbChecked, OCM.Resident,
  356.         u.done );
  357.  
  358.     gt.SetGadgetAttrs ( dlg.gadget[TypeChkID]^, dlg.win, NIL,
  359.         gt.cbChecked, OCM.TypeChk,
  360.         u.done );
  361.     gt.SetGadgetAttrs ( dlg.gadget[OvflChkID]^, dlg.win, NIL,
  362.         gt.cbChecked, OCM.OvflChk,
  363.         u.done );
  364.     gt.SetGadgetAttrs ( dlg.gadget[IndexChkID]^, dlg.win, NIL,
  365.         gt.cbChecked, OCM.IndexChk,
  366.         u.done );
  367.     gt.SetGadgetAttrs ( dlg.gadget[RangeChkID]^, dlg.win, NIL,
  368.         gt.cbChecked, OCM.RangeChk,
  369.         u.done );
  370.     gt.SetGadgetAttrs ( dlg.gadget[CaseChkID]^, dlg.win, NIL,
  371.         gt.cbChecked, OCM.CaseChk,
  372.         u.done );
  373.     gt.SetGadgetAttrs ( dlg.gadget[NilChkID]^, dlg.win, NIL,
  374.         gt.cbChecked, OCM.NilChk,
  375.         u.done );
  376.     gt.SetGadgetAttrs ( dlg.gadget[ReturnChkID]^, dlg.win, NIL,
  377.         gt.cbChecked, OCM.ReturnChk,
  378.         u.done );
  379.     gt.SetGadgetAttrs ( dlg.gadget[StackChkID]^, dlg.win, NIL,
  380.         gt.cbChecked, OCM.StackChk,
  381.         u.done );
  382.     gt.SetGadgetAttrs ( dlg.gadget[LongVarsID]^, dlg.win, NIL,
  383.         gt.cbChecked, OCM.LongVars,
  384.         u.done );
  385.     gt.SetGadgetAttrs ( dlg.gadget[ClearVarsID]^, dlg.win, NIL,
  386.         gt.cbChecked, OCM.ClearVars,
  387.         u.done );
  388.     gt.SetGadgetAttrs ( dlg.gadget[AssertChkID]^, dlg.win, NIL,
  389.         gt.cbChecked, OCM.AssertChk,
  390.         u.done );
  391.   END SetAttrs;
  392.  
  393. (* ---------------------------------- *)
  394. PROCEDURE (dlg : SettingsDialog) GetAttrs;
  395.  
  396.   VAR stringInfo : i.StringInfoPtr; node : e.NodePtr;
  397.  
  398.   PROCEDURE GetString ( gad : i.GadgetPtr; VAR str : ARRAY OF CHAR );
  399.  
  400.     VAR stringInfo : i.StringInfoPtr;
  401.  
  402.     BEGIN (* GetString *)
  403.       stringInfo := SYS.VAL (i.StringInfoPtr, gad.specialInfo);
  404.       COPY (stringInfo.buffer^, str);
  405.     END GetString;
  406.  
  407.   BEGIN (* GetAttrs *)
  408.     OCM.ClearSearchPaths;
  409.     gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  410.         gt.lvLabels, gt.noList,
  411.         u.done );
  412.     node := SYS.VAL (e.NodePtr, eu.GetHead (dlg.pathLabels^));
  413.     WHILE node # NIL DO
  414.       OCM.AddSearchPath (node.name);
  415.       node := SYS.VAL (e.NodePtr, eu.GetSucc (node));
  416.     END;
  417.     GetString (dlg.gadget[SymPathID], OCM.SymPath);
  418.     GetString (dlg.gadget[SymExtID], OCM.SymExt);
  419.     GetString (dlg.gadget[ObjPathID], OCM.ObjPath);
  420.     GetString (dlg.gadget[ObjExtID], OCM.ObjExt);
  421.     GetString (dlg.gadget[ErrPathID], OCM.ErrPath);
  422.     GetString (dlg.gadget[ErrExtID], OCM.ErrExt);
  423.     GetString (dlg.gadget[SetNamesID], OCM.SetNames);
  424.     GetString (dlg.gadget[ClearNamesID], OCM.ClearNames);
  425.  
  426.     OCM.Verbose := (i.selected IN dlg.gadget[VerboseID].flags);
  427.     OCM.MakeIcons := (i.selected IN dlg.gadget[MakeIconsID].flags);
  428.  
  429.     stringInfo :=
  430.       SYS.VAL (i.StringInfoPtr, dlg.gadget[CodeSizeID].specialInfo);
  431.     OCM.CodeSize := stringInfo.longInt;
  432.     stringInfo :=
  433.       SYS.VAL (i.StringInfoPtr, dlg.gadget[ConstSizeID].specialInfo);
  434.     OCM.ConstSize := stringInfo.longInt;
  435.   END GetAttrs;
  436.  
  437. (* ---------------------------------- *)
  438. PROCEDURE (dlg : OptionsDialog) GetAttrs;
  439.  
  440.   BEGIN (* GetAttrs *)
  441.     OCM.Standard := (i.selected IN dlg.gadget[StandardID].flags);
  442.     OCM.Initialise := (i.selected IN dlg.gadget[InitialiseID].flags);
  443.     OCM.Main := (i.selected IN dlg.gadget[MainID].flags);
  444.     OCM.Warnings := (i.selected IN dlg.gadget[WarningsID].flags);
  445.     OCM.Register := (i.selected IN dlg.gadget[RegisterID].flags);
  446.     OCM.Debug := (i.selected IN dlg.gadget[DebugID].flags);
  447.     OCM.SmallCode := (i.selected IN dlg.gadget[SmallCodeID].flags);
  448.     OCM.SmallData := (i.selected IN dlg.gadget[SmallDataID].flags);
  449.     OCM.Resident := (i.selected IN dlg.gadget[ResidentID].flags);
  450.  
  451.     OCM.TypeChk := (i.selected IN dlg.gadget[TypeChkID].flags);
  452.     OCM.OvflChk := (i.selected IN dlg.gadget[OvflChkID].flags);
  453.     OCM.IndexChk := (i.selected IN dlg.gadget[IndexChkID].flags);
  454.     OCM.RangeChk := (i.selected IN dlg.gadget[RangeChkID].flags);
  455.     OCM.CaseChk := (i.selected IN dlg.gadget[CaseChkID].flags);
  456.     OCM.NilChk := (i.selected IN dlg.gadget[NilChkID].flags);
  457.     OCM.ReturnChk := (i.selected IN dlg.gadget[ReturnChkID].flags);
  458.     OCM.StackChk := (i.selected IN dlg.gadget[StackChkID].flags);
  459.     OCM.AssertChk := (i.selected IN dlg.gadget[AssertChkID].flags);
  460.     OCM.ClearVars := (i.selected IN dlg.gadget[ClearVarsID].flags);
  461.     OCM.LongVars := (i.selected IN dlg.gadget[LongVarsID].flags);
  462.   END GetAttrs;
  463.  
  464. (* ---------------------------------- *)
  465. PROCEDURE (dlg : SettingsDialog) SetupWindow ( win : i.WindowPtr );
  466.   BEGIN (* SetupWindow *)
  467.     dlg.SetupWindow^ (win);
  468.     dlg.SetAttrs
  469.   END SetupWindow;
  470.  
  471. (* ---------------------------------- *)
  472. PROCEDURE (dlg : OptionsDialog) SetupWindow ( win : i.WindowPtr );
  473.   BEGIN (* SetupWindow *)
  474.     dlg.SetupWindow^ (win);
  475.     dlg.SetAttrs
  476.   END SetupWindow;
  477.  
  478. (* ---------------------------------- *)
  479. PROCEDURE (dlg : SettingsDialog) HandleGadgetUp
  480.   ( msg : i.IntuiMessagePtr )
  481.   : INTEGER;
  482.  
  483.   VAR
  484.     result, gadgetID : INTEGER;
  485.     gadget : i.GadgetPtr;
  486.     stringInfo : i.StringInfoPtr;
  487.     buffer : e.LSTRPTR;
  488.     code : INTEGER;
  489.     node : e.NodePtr;
  490.  
  491.   (* ---------------------------------- *)
  492.   PROCEDURE DoAbout;
  493.  
  494.     VAR es : i.EasyStruct;
  495.  
  496.     BEGIN (* DoAbout *)
  497.       dlg.Block;
  498.       es.structSize := SIZE (i.EasyStruct);
  499.       es.flags := {};
  500.       es.title := cat.GetString (cat.gui4);
  501.       es.gadgetFormat := cat.GetString (cat.gui2);
  502.       es.textFormat := SYS.ADR ("%s (%s)\n%s");
  503.       IF 0 = i.EasyRequest ( NIL, SYS.ADR (es), NIL,
  504.           SYS.ADR (OCPrefsRev.vers), SYS.ADR (OCPrefsRev.date),
  505.           cat.GetString (cat.gui5),
  506.           NIL )
  507.       THEN
  508.       END;
  509.       dlg.UnBlock
  510.     END DoAbout;
  511.  
  512.   (* ---------------------------------- *)
  513.   PROCEDURE DoBrowse;
  514.  
  515.     VAR
  516.       drawer : ARRAY 256 OF CHAR; file : ARRAY 32 OF CHAR;
  517.       str : e.LSTRPTR;
  518.  
  519.     BEGIN (* DoBrowse *)
  520.       COPY (OCM.PrefsFile, drawer);
  521.       str := d.PathPart (drawer);
  522.       str[0] := 0X;
  523.  
  524.       str := d.FilePart (OCM.PrefsFile);
  525.       COPY (str^, file);
  526.  
  527.       dlg.Block;
  528.       str := cat.GetString (cat.gui13);
  529.       IF RequestFile ( dlg.win, str^, "#?.prefs",
  530.                        drawer, file, FALSE )
  531.       THEN
  532.         IF d.AddPart (drawer, file, LEN (drawer))
  533.          & OCM.LoadPrefs (drawer) THEN
  534.           dlg.SetAttrs
  535.         ELSE
  536.           Notice (cat.gui14)
  537.         END
  538.       END;
  539.       dlg.UnBlock
  540.     END DoBrowse;
  541.  
  542.   (* ---------------------------------- *)
  543.   PROCEDURE DoSaveAs;
  544.  
  545.     VAR
  546.       drawer : ARRAY 256 OF CHAR; file : ARRAY 32 OF CHAR;
  547.       str : e.LSTRPTR;
  548.  
  549.     BEGIN (* DoSaveAs *)
  550.       COPY (OCM.PrefsFile, drawer);
  551.       str := d.PathPart (drawer);
  552.       str[0] := 0X;
  553.  
  554.       str := d.FilePart (OCM.PrefsFile);
  555.       COPY (str^, file);
  556.  
  557.       dlg.Block;
  558.       str := cat.GetString (cat.gui13);
  559.       IF RequestFile ( dlg.win, str^, "#?.prefs",
  560.                        drawer, file, TRUE )
  561.       THEN
  562.         dlg.GetAttrs;
  563.         IF ( d.AddPart (drawer, file, LEN (drawer))
  564.              & OCM.SavePrefs (drawer) )
  565.         THEN
  566.           gt.SetGadgetAttrs ( dlg.gadget[PrefsFileID]^, dlg.win, NIL,
  567.               gt.txText, SYS.ADR (OCM.PrefsFile),
  568.               u.done );
  569.           MakeIcon (drawer)
  570.         ELSE
  571.           Notice (cat.gui15)
  572.         END
  573.       END;
  574.       dlg.UnBlock;
  575.     END DoSaveAs;
  576.  
  577.   BEGIN (* HandleGadgetUp *)
  578.     result := Events.Continue;
  579.  
  580.     code := msg.code;
  581.     gadget := msg.iAddress;
  582.     gt.ReplyIMsg (msg);
  583.  
  584.     gadgetID := gadget.gadgetID;
  585.     CASE gadgetID OF
  586.       BrowseID:
  587.         DoBrowse
  588.     |
  589.       AboutID:
  590.         DoAbout
  591.     |
  592.       SaveID:
  593.         dlg.GetAttrs;
  594.         IF OCM.SavePrefs (OCM.PrefsFile) THEN
  595.           MakeIcon (OCM.PrefsFile)
  596.         ELSE
  597.           dlg.Block;
  598.           Notice (cat.gui15);
  599.           dlg.UnBlock
  600.         END
  601.     |
  602.       SaveAsID:
  603.         DoSaveAs()
  604.     |
  605.       QuitID:
  606.         result := Events.Stop
  607.     |
  608.       PathID:
  609.         node := SYS.VAL (e.NodePtr, eu.NodeAt (dlg.pathLabels^, code));
  610.         gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  611.             gt.stString,   node.name,
  612.             i.gaDisabled, FALSE,
  613.             u.done );
  614.         IF i.ActivateGadget ( dlg.gadget[PathStrID]^, dlg.win, NIL ) THEN END;
  615.         gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  616.             i.gaDisabled, FALSE,
  617.             u.done );
  618.         dlg.selectedPath := code
  619.     |
  620.       PathStrID:
  621.         stringInfo := SYS.VAL (i.StringInfoPtr, gadget.specialInfo);
  622.         buffer := stringInfo.buffer;
  623.         IF (buffer # NIL) & (buffer^ # "") THEN
  624.           gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  625.               gt.lvLabels, gt.noList,
  626.               u.done );
  627.           IF dlg.selectedPath >= 0 THEN
  628.             node := SYS.VAL ( e.NodePtr,
  629.                 eu.NodeAt (dlg.pathLabels^, dlg.selectedPath) );
  630.             SYS.DISPOSE (node.name)
  631.           ELSE
  632.             NEW (node);
  633.             e.AddTail (dlg.pathLabels^, node)
  634.           END;
  635.           SYS.NEW (node.name, str.Length (buffer^) + 1);
  636.           COPY (buffer^, node.name^);
  637.           gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  638.               gt.lvLabels, dlg.pathLabels,
  639.               u.done )
  640.         END;
  641.         gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  642.             gt.stString,   NIL,
  643.             i.gaDisabled, TRUE,
  644.             u.done );
  645.         gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  646.             i.gaDisabled, TRUE,
  647.             u.done );
  648.         dlg.selectedPath := -1
  649.     |
  650.       AddID:
  651.         gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  652.             gt.stString,   NIL,
  653.             i.gaDisabled, FALSE,
  654.             u.done );
  655.         IF i.ActivateGadget ( dlg.gadget[PathStrID]^, dlg.win, NIL ) THEN END;
  656.         gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  657.             i.gaDisabled, FALSE,
  658.             u.done );
  659.         dlg.selectedPath := -1
  660.     |
  661.       DeleteID:
  662.         IF dlg.selectedPath >= 0 THEN
  663.           gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  664.               gt.lvLabels, gt.noList,
  665.               u.done );
  666.           node := SYS.VAL ( e.NodePtr,
  667.               eu.NodeAt (dlg.pathLabels^, dlg.selectedPath) );
  668.           e.Remove (node);
  669.           SYS.DISPOSE (node.name);
  670.           SYS.DISPOSE (node);
  671.           gt.SetGadgetAttrs ( dlg.gadget[PathID]^, dlg.win, NIL,
  672.               gt.lvLabels, dlg.pathLabels,
  673.               u.done )
  674.         END;
  675.         gt.SetGadgetAttrs ( dlg.gadget[PathStrID]^, dlg.win, NIL,
  676.             gt.stString,   NIL,
  677.             i.gaDisabled, TRUE,
  678.             u.done );
  679.         gt.SetGadgetAttrs ( dlg.gadget[DeleteID]^, dlg.win, NIL,
  680.             i.gaDisabled, TRUE,
  681.             u.done );
  682.         dlg.selectedPath := -1
  683.     |
  684.       MoreID:
  685.         IF dlg.optionsDlg = NIL THEN NEW (dlg.optionsDlg) END;
  686.         dlg.Block;
  687.         IF dlg.optionsDlg.Open (visualInfo, drawInfo) THEN
  688.           Events.SimpleLoop (dlg.optionsDlg, Events.NoGC);
  689.           dlg.optionsDlg.Close
  690.         ELSE
  691.           Errors.Abort ("Failed to open Options Dialog")
  692.         END;
  693.         dlg.UnBlock;
  694.     ELSE (* NOP *)
  695.     END;
  696.  
  697.     RETURN result
  698.   END HandleGadgetUp;
  699.  
  700. (* ---------------------------------- *)
  701. PROCEDURE (dlg : OptionsDialog) HandleGadgetUp
  702.   ( msg : i.IntuiMessagePtr )
  703.   : INTEGER;
  704.  
  705.   VAR
  706.     result : INTEGER;
  707.     gadget : i.GadgetPtr;
  708.  
  709.   BEGIN (* HandleGadgetUp *)
  710.     result := Events.Continue;
  711.  
  712.     gadget := msg.iAddress;
  713.     gt.ReplyIMsg (msg);
  714.  
  715.     CASE gadget.gadgetID OF
  716.       SmallDataID:
  717.         IF i.selected IN dlg.gadget[SmallDataID].flags THEN
  718.           gt.SetGadgetAttrs ( dlg.gadget[ResidentID]^, dlg.win, NIL,
  719.               gt.cbChecked, FALSE,
  720.               u.done )
  721.         END
  722.     |
  723.       ResidentID:
  724.         IF i.selected IN dlg.gadget[ResidentID].flags THEN
  725.           gt.SetGadgetAttrs ( dlg.gadget[SmallDataID]^, dlg.win, NIL,
  726.               gt.cbChecked, FALSE,
  727.               u.done )
  728.         END
  729.     |
  730.       AcceptID:
  731.         dlg.GetAttrs;
  732.         result := Events.Stop
  733.     |
  734.       CancelID:
  735.         result := Events.Stop
  736.     ELSE (* Oops... *)
  737.     END;
  738.  
  739.     RETURN result
  740.   END HandleGadgetUp;
  741.  
  742. (* ---------------------------------- *)
  743. PROCEDURE (dlg : SettingsDialog) InitObjects () : BOOLEAN;
  744.  
  745.   CONST
  746.     template1 = "000000000000";
  747.     template2 = "000000";
  748.     template3 = "0000000000000000000000000000";
  749.  
  750.   VAR
  751.     obj : ARRAY 15 OF ea.OPTR; obj2 : ARRAY 14 OF ea.OPTR;
  752.     x, w1, w2, w3, ignore, hPlus2, vPlus1, vDiv2 : LONGINT;
  753.     gad : ARRAY NumGadgets1 OF SYS.ADDRESS; ta : SYS.ADDRESS;
  754.     txt : ARRAY 11 OF e.LSTRPTR; tags : ARRAY 2 OF u.TagItem;
  755.  
  756.   PROCEDURE StringGroup1
  757.     ( title     : e.LSTRPTR;
  758.       gadget1,
  759.       gadget2   : SYS.ADDRESS )
  760.     : ea.OPTR;
  761.  
  762.     BEGIN (* StringGroup1 *)
  763.       RETURN eam.HGroup (
  764.           ea.Child,        eam.EmptyBox (1, u.done),
  765.           ea.Child,        eam.GTString ( title,
  766.               ea.GTTagList,       SYS.ADR (tags1),
  767.               ea.InstanceAddress, gadget1,
  768.               ea.MinWidth,        w1 + 10,
  769.               u.done ),
  770.           ea.Child,        eam.GTString ( NIL,
  771.               ea.GTTagList,       SYS.ADR (tags2),
  772.               ea.InstanceAddress, gadget2,
  773.               ea.MinWidth,        w2 + 10,
  774.               u.done ),
  775.           u.done );
  776.     END StringGroup1;
  777.  
  778.   PROCEDURE StringGroup2
  779.     ( title     : e.LSTRPTR;
  780.       gadget    : SYS.ADDRESS )
  781.     : ea.OPTR;
  782.  
  783.     BEGIN (* StringGroup2 *)
  784.       RETURN eam.HGroup (
  785.           ea.Child, eam.EmptyBox (1, u.done),
  786.           ea.Child, eam.GTString ( title,
  787.               ea.GTTagList,       SYS.ADR (tags1),
  788.               ea.InstanceAddress, gadget,
  789.               ea.MinWidth,        w3 + 10,
  790.               u.done ),
  791.           u.done );
  792.     END StringGroup2;
  793.  
  794.   PROCEDURE IntegerGroup
  795.     ( title     : e.LSTRPTR;
  796.       gadget    : SYS.ADDRESS )
  797.     : ea.OPTR;
  798.  
  799.     BEGIN (* IntegerGroup *)
  800.       RETURN eam.HGroup (
  801.           ea.Child, eam.EmptyBox (1, u.done),
  802.           ea.Child, eam.GTInteger ( title,
  803.               ea.InstanceAddress, gadget,
  804.               ea.MinWidth,        w2 + 10,
  805.               u.done ),
  806.           u.done );
  807.     END IntegerGroup;
  808.  
  809.   BEGIN
  810.     FOR x := 0 TO NumGadgets1 - 1 DO
  811.       gad[x] := SYS.ADR (dlg.gadget[x])
  812.     END;
  813.     ta := SYS.ADR (textAttr[0]);
  814.  
  815.     w1 := ea.TextLength (textAttr[0], template1, 0X);
  816.     w2 := ea.TextLength (textAttr[0], template2, 0X);
  817.     w3 := ea.TextLength (textAttr[0], template3, 0X);
  818.  
  819.     hPlus2 := hSpace + 2;
  820.     vPlus1 := vSpace + 1;
  821.     vDiv2 := vSpace DIV 2;
  822.  
  823.     (* set up some defaults for all objects *)
  824.     ignore := ea.SetAttr ( NIL, ea.DefGTTextAttr, ta );
  825.  
  826.     (* build the object tree *)
  827.     obj[0] := eam.HGroup (
  828.         ea.BorderLeft,   hSpace,
  829.         ea.BorderRight,  2,
  830.         ea.BorderTop,    1,
  831.         ea.BorderBottom, 1,
  832.         ea.Child,        frm.NewFrame ( dlg.frame[0], u.done ),
  833.         ea.Child,        lbl.NewLabel ( dlg.label[0],
  834.             ea.BorderTop,   1,
  835.             ea.BorderRight, hSpace,
  836.             u.done ),
  837.         ea.Child, eam.GTText ( NIL,
  838.             ea.InstanceAddress, gad[PrefsFileID],
  839.             ea.Weight,          1,
  840.             u.done ),
  841.         ea.Child, eam.GTButton ( SYS.ADR ("..."),
  842.             ea.ID,              BrowseID,
  843.             u.done ),
  844.         u.done );
  845.     frm.InitFrame ( dlg.frame[0],
  846.         {frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  847.     lbl.InitLabel ( dlg.label[0], cat.GetString (cat.gui16),
  848.         ta, gfx.jam2, {lbl.ShadowText}, dlg.drawInfo );
  849.  
  850.     obj[1] := eam.GTButton ( cat.GetString (cat.gui17),
  851.         ea.ID,           AddID,
  852.         ea.Weight,       1,
  853.         u.done );
  854.     obj[2] := eam.GTButton ( cat.GetString (cat.gui18),
  855.         ea.InstanceAddress, gad[DeleteID],
  856.         ea.ID,              DeleteID,
  857.         ea.Weight,          1,
  858.         u.done );
  859.     obj[3] := eam.HGroup (
  860.         ea.Child,     obj[1],
  861.         ea.Child,     obj[2],
  862.         u.done );
  863.     ignore := ea.NewRelation ( obj[3], spt.SameSizeHook,
  864.         ea.Object, obj[1],
  865.         ea.Object, obj[2],
  866.         u.done );
  867.  
  868.     obj[4] := eam.VGroup (
  869.         ea.BorderLeft,   hSpace,
  870.         ea.BorderRight,  hSpace,
  871.         ea.BorderTop,    vSpace,
  872.         ea.BorderBottom, vSpace,
  873.         (* ea.Weight,       1, *)
  874.         ea.Child,        frm.NewFrame ( dlg.frame[1], u.done ),
  875.         ea.Child,        lbl.NewLabel ( dlg.label[1],
  876.             ea.BorderBottom, vDiv2,
  877.             u.done ),
  878.         ea.Child,        eam.GTListView ( NIL,
  879.             ea.MinWidth,        w1 + 20,
  880.             ea.Weight,          1,
  881.             ea.InstanceAddress, gad[PathID],
  882.             ea.ID,              PathID,
  883.             u.done ),
  884.         ea.Child,        eam.GTString ( NIL,
  885.             ea.GTTagList,       SYS.ADR (tags1),
  886.             ea.InstanceAddress, gad[PathStrID],
  887.             ea.ID,              PathStrID,
  888.             u.done ),
  889.         ea.Child,        obj[3],
  890.         u.done );
  891.     frm.InitFrame ( dlg.frame[1],
  892.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  893.     lbl.InitLabel ( dlg.label[1],
  894.         cat.GetString (cat.gui19), ta,
  895.         gfx.jam2, {lbl.ShadowText}, dlg.drawInfo );
  896.  
  897.     obj[5] := eam.VGroup (
  898.         ea.BorderLeft,   hSpace,
  899.         ea.BorderRight,  hSpace,
  900.         ea.BorderTop,    vSpace,
  901.         ea.BorderBottom, vSpace,
  902.         ea.Child,        frm.NewFrame ( dlg.frame[2], u.done ),
  903.         ea.Child,        lbl.NewLabel ( dlg.label[2],
  904.             ea.BorderBottom, vDiv2,
  905.             u.done ),
  906.         ea.Child,        eam.HGroup (
  907.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  908.             ea.Child,        eam.VGroup (
  909.                 ea.Child,        StringGroup1 ( cat.GetString (cat.gui20),
  910.                     gad[SymPathID], gad[SymExtID] ),
  911.                 ea.Child,        StringGroup1 ( cat.GetString (cat.gui21),
  912.                     gad[ObjPathID], gad[ObjExtID] ),
  913.                 ea.Child,        StringGroup1 ( cat.GetString (cat.gui22),
  914.                     gad[ErrPathID], gad[ErrExtID] ),
  915.                 u.done ),
  916.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  917.             u.done ),
  918.         u.done );
  919.     frm.InitFrame ( dlg.frame[2],
  920.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  921.     lbl.InitLabel ( dlg.label[2],
  922.         cat.GetString (cat.gui23), ta,
  923.         gfx.jam2, {lbl.ShadowText}, dlg.drawInfo );
  924.  
  925.     obj[6] := eam.VGroup (
  926.         ea.BorderLeft,   hSpace,
  927.         ea.BorderRight,  hSpace,
  928.         ea.BorderTop,    vSpace,
  929.         ea.BorderBottom, vSpace,
  930.         ea.Child,        frm.NewFrame ( dlg.frame[3], u.done ),
  931.         ea.Child,        lbl.NewLabel ( dlg.label[3],
  932.             ea.BorderBottom, vDiv2,
  933.             u.done ),
  934.         ea.Child,        eam.HGroup (
  935.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  936.             ea.Child,        eam.VGroup (
  937.                 ea.Child,        StringGroup2 ( cat.GetString (cat.gui31), gad[SetNamesID] ),
  938.                 ea.Child,        StringGroup2 ( cat.GetString (cat.gui32), gad[ClearNamesID] ),
  939.                 u.done ),
  940.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  941.             u.done ),
  942.         u.done );
  943.     frm.InitFrame ( dlg.frame[3],
  944.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  945.     lbl.InitLabel ( dlg.label[3], cat.GetString (cat.gui33), ta,
  946.         gfx.jam2, {lbl.ShadowText}, dlg.drawInfo );
  947.  
  948.     txt[0] := SYS.ADR ("Verbose");
  949.     txt[1] := SYS.ADR ("Make Icons");
  950.  
  951.     obj2[0] := eam.GTCheckBox ( txt[0],
  952.         ea.GTFlags,         {gt.placeTextRight},
  953.         ea.InstanceAddress, gad[VerboseID],
  954.         ea.ID,              VerboseID,
  955.         u.done );
  956.     obj2[1] := eam.GTCheckBox ( txt[1],
  957.         ea.GTFlags,         {gt.placeTextRight},
  958.         ea.InstanceAddress, gad[MakeIconsID],
  959.         ea.ID,              MakeIconsID,
  960.         u.done );
  961.  
  962.     obj[7] := eam.VGroup (
  963.         ea.BorderLeft,   hSpace,
  964.         ea.BorderRight,  hSpace,
  965.         ea.BorderTop,    vSpace,
  966.         ea.BorderBottom, vSpace,
  967.         ea.Child, frm.NewFrame ( dlg.frame[4], u.done ),
  968.         ea.Child, lbl.NewLabel ( dlg.label[4],
  969.             ea.BorderBottom, vDiv2,
  970.             u.done ),
  971.         ea.Child, obj2[0],
  972.         ea.Child, obj2[1],
  973.         u.done );
  974.     frm.InitFrame ( dlg.frame[4], {frm.DoubleBorder, frm.Recessed},
  975.                     dlg.visualInfo, dlg.drawInfo );
  976.     lbl.InitLabel ( dlg.label[4],
  977.         cat.GetString (cat.gui24), ta, gfx.jam2,
  978.         {lbl.ShadowText}, dlg.drawInfo );
  979.  
  980.     obj[8] := eam.VGroup (
  981.         ea.BorderLeft,   hSpace,
  982.         ea.BorderRight,  hSpace,
  983.         ea.BorderTop,    vSpace,
  984.         ea.BorderBottom, vSpace,
  985.         (* ea.Weight,       100, *)
  986.         ea.Child,        frm.NewFrame ( dlg.frame[5], u.done ),
  987.         ea.Child,        lbl.NewLabel ( dlg.label[5],
  988.             ea.BorderBottom, vDiv2,
  989.             u.done ),
  990.         ea.Child,        eam.HGroup (
  991.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  992.             ea.Child,        eam.VGroup (
  993.                 ea.Child,        IntegerGroup ( cat.GetString (cat.gui34), gad[CodeSizeID] ),
  994.                 ea.Child,        IntegerGroup ( cat.GetString (cat.gui35), gad[ConstSizeID] ),
  995.                 u.done ),
  996.             ea.Child,        eam.EmptyBox ( 1, u.done ),
  997.             u.done ),
  998.         u.done );
  999.     frm.InitFrame ( dlg.frame[5],
  1000.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  1001.     lbl.InitLabel ( dlg.label[5],
  1002.         cat.GetString (cat.gui36), ta, gfx.jam2,
  1003.         {lbl.ShadowText}, dlg.drawInfo );
  1004.  
  1005.     obj[9] := eam.GTButton ( cat.GetString (cat.gui26),
  1006.         ea.ID,           MoreID,
  1007.         ea.Weight,       100,
  1008.         u.done );
  1009.  
  1010.     obj[10] := eam.GTButton ( cat.GetString (cat.gui40),
  1011.         ea.ID,           AboutID,
  1012.         ea.Weight,       1,
  1013.         u.done );
  1014.     obj[11] := eam.GTButton ( cat.GetString (cat.gui37),
  1015.         ea.ID,           SaveID,
  1016.         ea.Weight,       1,
  1017.         u.done );
  1018.     obj[12] := eam.GTButton ( cat.GetString (cat.gui41),
  1019.         ea.ID,           SaveAsID,
  1020.         ea.Weight,       1,
  1021.         u.done );
  1022.     obj[13] := eam.GTButton ( cat.GetString (cat.gui9),
  1023.         ea.ID,           QuitID,
  1024.         ea.Weight,       1,
  1025.         u.done );
  1026.     obj[14] := eam.HGroup (
  1027.         ea.BorderBottom, vSpace,
  1028.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1029.         ea.Child,        obj[10],
  1030.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1031.         ea.Child,        obj[11],
  1032.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1033.         ea.Child,        obj[12],
  1034.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1035.         ea.Child,        obj[13],
  1036.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1037.         u.done );
  1038.     ignore := ea.NewRelation ( obj[14], spt.SameSizeHook,
  1039.         ea.Object, obj[10],
  1040.         ea.Object, obj[11],
  1041.         ea.Object, obj[12],
  1042.         ea.Object, obj[13],
  1043.         u.done );
  1044.  
  1045.     dlg.winObj := eam.VGroup (
  1046.       ea.Child,        eam.VGroup (
  1047.         ea.BorderLeft,   hSpace,
  1048.         ea.BorderRight,  hSpace,
  1049.         ea.BorderTop,    vSpace,
  1050.         ea.BorderBottom, vSpace,
  1051.         ea.Child,        eam.VGroup (
  1052.           ea.Child,        obj[0],
  1053.           ea.Child,        eam.EmptyBox (1, ea.MinHeight, vSpace, u.done),
  1054.           ea.Child,        eam.HGroup (
  1055.             ea.Child,        obj[4],
  1056.             ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1057.             ea.Child,        eam.VGroup (
  1058.               ea.Child,        obj[5],
  1059.               ea.Child,        eam.EmptyBox (1, ea.MinHeight, vSpace, u.done),
  1060.               ea.Child,        obj[6],
  1061.               u.done ),
  1062.             u.done ),
  1063.           u.done ),
  1064.         ea.Child,        eam.EmptyBox (1, ea.MinHeight, vSpace, u.done),
  1065.         ea.Child,        eam.HGroup (
  1066.           ea.Child,        obj[7],
  1067.           ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1068.           ea.Child,        obj[8],
  1069.           ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1070.           ea.Child,        obj[9],
  1071.           u.done ),
  1072.         u.done ),
  1073.       ea.Child,        obj[14],
  1074.       u.done );
  1075.  
  1076.     RETURN (dlg.winObj # NIL)
  1077.   END InitObjects;
  1078.  
  1079. (* ---------------------------------- *)
  1080. PROCEDURE (dlg : OptionsDialog) InitObjects () : BOOLEAN;
  1081.  
  1082.   VAR
  1083.     obj : ARRAY 5 OF ea.OPTR;
  1084.     obj2 : ARRAY 11 OF ea.OPTR;
  1085.     x, ignore, vDiv2 : LONGINT;
  1086.     gad : ARRAY NumGadgets2 OF SYS.ADDRESS;
  1087.     ta : SYS.ADDRESS;
  1088.     txt : ARRAY 11 OF e.LSTRPTR;
  1089.  
  1090.   BEGIN
  1091.     FOR x := 0 TO NumGadgets2 - 1 DO
  1092.       gad[x] := SYS.ADR (dlg.gadget[x])
  1093.     END;
  1094.     ta := SYS.ADR (textAttr[0]);
  1095.  
  1096.     vDiv2 := vSpace DIV 2;
  1097.  
  1098.     (* set up some defaults for all objects *)
  1099.     ignore := ea.SetAttr ( NIL, ea.DefGTTextAttr, ta );
  1100.  
  1101.     (* build the object tree *)
  1102.     txt[0]  := SYS.ADR ("STANDARD");
  1103.     txt[1]  := SYS.ADR ("INITIALISE");
  1104.     txt[2]  := SYS.ADR ("MAIN");
  1105.     txt[3]  := SYS.ADR ("WARNINGS");
  1106.     txt[4]  := SYS.ADR ("REGISTER");
  1107.     txt[5]  := SYS.ADR ("DEBUG");
  1108.     txt[6]  := SYS.ADR ("SMALLCODE");
  1109.     txt[7]  := SYS.ADR ("SMALLDATA");
  1110.     txt[8]  := SYS.ADR ("RESIDENT");
  1111.  
  1112.     FOR x := 0 TO 8 DO
  1113.       obj2[x] := eam.GTCheckBox ( txt[x],
  1114.           ea.GTFlags,         {gt.placeTextRight},
  1115.           ea.InstanceAddress, gad[StandardID + x],
  1116.           ea.ID,              StandardID + x,
  1117.           ea.Weight,          1,
  1118.           u.done )
  1119.     END;
  1120.  
  1121.     obj[0] := eam.VGroup (
  1122.         ea.BorderLeft,   hSpace,
  1123.         ea.BorderRight,  hSpace,
  1124.         ea.BorderTop,    vSpace,
  1125.         ea.BorderBottom, vSpace,
  1126.         ea.Child, frm.NewFrame ( dlg.frame[0], u.done ),
  1127.         ea.Child, lbl.NewLabel ( dlg.label[0],
  1128.             ea.BorderBottom, vDiv2,
  1129.             u.done ),
  1130.         ea.Child, obj2[0],
  1131.         ea.Child, obj2[1],
  1132.         ea.Child, obj2[2],
  1133.         ea.Child, obj2[3],
  1134.         ea.Child, obj2[4],
  1135.         ea.Child, obj2[5],
  1136.         ea.Child, obj2[6],
  1137.         ea.Child, obj2[7],
  1138.         ea.Child, obj2[8],
  1139.         u.done );
  1140.     frm.InitFrame ( dlg.frame[0], {frm.DoubleBorder, frm.Recessed},
  1141.                     dlg.visualInfo, dlg.drawInfo );
  1142.     lbl.InitLabel ( dlg.label[0],
  1143.         cat.GetString (cat.gui30), ta, gfx.jam2,
  1144.         {lbl.ShadowText}, dlg.drawInfo );
  1145.  
  1146.     txt[0]  := SYS.ADR ("TypeChk");
  1147.     txt[1]  := SYS.ADR ("OvflChk");
  1148.     txt[2]  := SYS.ADR ("IndexChk");
  1149.     txt[3]  := SYS.ADR ("RangeChk");
  1150.     txt[4]  := SYS.ADR ("CaseChk");
  1151.     txt[5]  := SYS.ADR ("NilChk");
  1152.     txt[6]  := SYS.ADR ("ReturnChk");
  1153.     txt[7]  := SYS.ADR ("StackChk");
  1154.     txt[8]  := SYS.ADR ("AssertChk");
  1155.     txt[9]  := SYS.ADR ("LongVars");
  1156.     txt[10] := SYS.ADR ("ClearVars");
  1157.  
  1158.     FOR x := 0 TO 10 DO
  1159.       obj2[x] := eam.GTCheckBox ( txt[x],
  1160.           ea.GTFlags,         {gt.placeTextRight},
  1161.           ea.InstanceAddress, gad[TypeChkID + x],
  1162.           ea.ID,              TypeChkID + x,
  1163.           u.done )
  1164.     END;
  1165.  
  1166.     obj[1] := eam.VGroup (
  1167.       ea.BorderLeft,   hSpace,
  1168.       ea.BorderRight,  hSpace,
  1169.       ea.BorderTop,    vSpace,
  1170.       ea.BorderBottom, vSpace,
  1171.       ea.Child,        frm.NewFrame ( dlg.frame[1], u.done ),
  1172.       ea.Child,        lbl.NewLabel ( dlg.label[1],
  1173.         ea.BorderBottom, vDiv2,
  1174.         u.done ),
  1175.       ea.Child,        obj2[0],
  1176.       ea.Child,        obj2[1],
  1177.       ea.Child,        obj2[2],
  1178.       ea.Child,        obj2[3],
  1179.       ea.Child,        obj2[4],
  1180.       ea.Child,        obj2[5],
  1181.       ea.Child,        obj2[6],
  1182.       ea.Child,        obj2[7],
  1183.       ea.Child,        obj2[8],
  1184.       ea.Child,        obj2[9],
  1185.       ea.Child,        obj2[10],
  1186.       u.done );
  1187.     frm.InitFrame ( dlg.frame[1],
  1188.         {frm.DoubleBorder, frm.Recessed}, dlg.visualInfo, dlg.drawInfo );
  1189.     lbl.InitLabel ( dlg.label[1],
  1190.         cat.GetString (cat.gui25), ta, gfx.jam2,
  1191.         {lbl.ShadowText}, dlg.drawInfo );
  1192.  
  1193.     obj[2] := eam.GTButton ( cat.GetString (cat.gui27),
  1194.         ea.ID,           AcceptID,
  1195.         ea.Weight,       1,
  1196.         u.done );
  1197.     obj[3] := eam.GTButton ( cat.GetString (cat.gui28),
  1198.         ea.ID,           CancelID,
  1199.         ea.Weight,       1,
  1200.         u.done );
  1201.     obj[4] := eam.HGroup (
  1202.         ea.BorderBottom, vSpace,
  1203.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1204.         ea.Child,        obj[2],
  1205.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1206.         ea.Child,        obj[3],
  1207.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1208.         u.done );
  1209.     ignore := ea.NewRelation ( obj[4], spt.SameSizeHook,
  1210.         ea.Object, obj[2],
  1211.         ea.Object, obj[3],
  1212.         u.done );
  1213.  
  1214.     dlg.winObj := eam.VGroup (
  1215.       ea.Child,        eam.HGroup (
  1216.         ea.BorderLeft,   hSpace,
  1217.         ea.BorderRight,  hSpace,
  1218.         ea.BorderTop,    vSpace,
  1219.         ea.BorderBottom, vSpace,
  1220.         ea.Child,        obj[0],
  1221.         ea.Child,        eam.EmptyBox (1, ea.MinWidth, hSpace, u.done),
  1222.         ea.Child,        obj[1],
  1223.         u.done ),
  1224.       ea.Child,        obj[4],
  1225.       u.done );
  1226.  
  1227.     RETURN (dlg.winObj # NIL)
  1228.   END InitObjects;
  1229.  
  1230. (* ---------------------------------- *)
  1231. PROCEDURE (dlg : SettingsDialog) OpenWindow () : BOOLEAN;
  1232.  
  1233.   BEGIN
  1234.     dlg.title := cat.GetString (cat.gui39);
  1235.     dlg.flags := {i.windowDrag, i.windowDepth, i.windowClose, i.activate};
  1236.     dlg.IDCMP := {i.closeWindow, i.refreshWindow}
  1237.                  + gt.buttonIDCMP + gt.stringIDCMP
  1238.                  + gt.checkBoxIDCMP + gt.numberIDCMP;
  1239.  
  1240.     RETURN dlg.OpenWindow^()
  1241.   END OpenWindow;
  1242.  
  1243. (* ---------------------------------- *)
  1244. PROCEDURE (dlg : OptionsDialog) OpenWindow () : BOOLEAN;
  1245.  
  1246.   BEGIN
  1247.     dlg.title := cat.GetString (cat.gui29);
  1248.     dlg.flags := {i.windowDrag, i.windowDepth, i.windowClose, i.activate};
  1249.     dlg.IDCMP := {i.closeWindow, i.refreshWindow}
  1250.                  + gt.buttonIDCMP + gt.checkBoxIDCMP;
  1251.  
  1252.     RETURN dlg.OpenWindow^()
  1253.   END OpenWindow;
  1254.  
  1255. (* ---------------------------------- *)
  1256. PROCEDURE* Cleanup ( VAR rc : LONGINT );
  1257.  
  1258.   BEGIN (* Cleanup *)
  1259.     IF settingsDlg # NIL THEN
  1260.       settingsDlg.Close; settingsDlg := NIL
  1261.     END;
  1262.  
  1263.     IF drawInfo # NIL THEN
  1264.       i.FreeScreenDrawInfo (scr, drawInfo);
  1265.       drawInfo := NIL;
  1266.     END;
  1267.  
  1268.     IF visualInfo # NIL THEN
  1269.       gt.FreeVisualInfo (visualInfo);
  1270.       visualInfo := NIL;
  1271.     END;
  1272.  
  1273.     IF scr # NIL THEN
  1274.       i.UnlockPubScreen (e.NILSTR, scr);
  1275.       scr := NIL;
  1276.     END;
  1277.  
  1278.     IF textFont # NIL THEN
  1279.       gfx.CloseFont (textFont);
  1280.       textFont := NIL;
  1281.     END;
  1282.   END Cleanup;
  1283.  
  1284.  
  1285. (* ---------------------------------- *)
  1286. PROCEDURE Open*;
  1287.  
  1288.   (* ---------------------------------- *)
  1289.   PROCEDURE InitDisplay;
  1290.  
  1291.     VAR
  1292.       scrFont : gfx.TextFontPtr;
  1293.  
  1294.     BEGIN (* InitDisplay *)
  1295.       (* lock the screen *)
  1296.       scr := i.LockPubScreen (e.NILSTR);
  1297.       ASSERT (scr # NIL, Errors.postCondition);
  1298.  
  1299.       (* get VisualInfo and DrawInfo *)
  1300.       visualInfo := gt.GetVisualInfo (scr, u.done);
  1301.       drawInfo := i.GetScreenDrawInfo (scr);
  1302.       ASSERT ((visualInfo # NIL) & (drawInfo # NIL), Errors.postCondition);
  1303.  
  1304.       (* Calculate spacing from screen dimensions *)
  1305.       hSpace := scr.width  DIV 80;
  1306.       vSpace := scr.height DIV 64;
  1307.  
  1308.       (* get the font(s) *)
  1309.       scrFont := drawInfo.font;
  1310.       SYS.NEW ( textAttr[0].name,
  1311.                 str.Length (scrFont.message.node.name^) + 1 );
  1312.       COPY (scrFont.message.node.name^, textAttr[0].name^);
  1313.       textAttr[0].ySize := scrFont.ySize;
  1314.       textAttr[0].style := scrFont.style;
  1315.       textAttr[0].flags := scrFont.flags;
  1316.  
  1317.       textAttr[1].name := SYS.ADR ("helvetica.font");
  1318.       textAttr[1].ySize := 24;
  1319.       textAttr[1].style := gfx.normal;
  1320.       textAttr[1].flags := {gfx.diskFont, gfx.romFont};
  1321.  
  1322.       textFont := df.OpenDiskFont (textAttr[1]);
  1323.       IF textFont = NIL THEN textAttr[1] := textAttr[0] END
  1324.     END InitDisplay;
  1325.  
  1326.   BEGIN (* Open *)
  1327.     ASSERT (ea.base # NIL, Errors.noLibrary);
  1328.     ASSERT (settingsDlg = NIL, Errors.preCondition);
  1329.     Kernel.SetCleanup (Cleanup);
  1330.     InitDisplay;
  1331.     NEW (settingsDlg);
  1332.     IF settingsDlg.Open (visualInfo, drawInfo) THEN
  1333.       Events.SimpleLoop (settingsDlg, Events.NoGC);
  1334.       settingsDlg.Close; settingsDlg := NIL
  1335.     END
  1336.   END Open;
  1337.  
  1338. BEGIN
  1339.   tags1[0].tag := gt.stMaxChars; tags1[0].data := OCM.PathLen;
  1340.   tags1[1].tag := u.done;
  1341.   tags2[0].tag := gt.stMaxChars; tags2[0].data := OCM.ExtLen;
  1342.   tags2[1].tag := u.done;
  1343. END OCPrefsGUI.
  1344.  
  1345. (*************************************************************************
  1346.  
  1347.   $Log: OCPrefsGUI.mod $
  1348. # Revision 2.3  1995/07/14  13:12:06  fjc
  1349. # - [bug] The search directory strings were not properly saved
  1350. #   after the first save.
  1351. #
  1352. # Revision 2.2  1995/06/29  19:13:34  fjc
  1353. # - OCPrefs_2_3
  1354. #
  1355. # Revision 2.1  1995/06/15  18:21:44  fjc
  1356. # - Fixed event handling code to make SMALLDATA and RESIDENT
  1357. #   mutually exclusive.
  1358. #
  1359. # Revision 1.7  1995/06/04  22:57:19  fjc
  1360. # *** empty log message ***
  1361. #
  1362. # Revision 1.6  1995/06/03  19:39:13  fjc
  1363. # - Split off options and pragmas groups into a seperate
  1364. #   dialog.
  1365. #
  1366. # Revision 1.5  1995/06/02  18:50:24  fjc
  1367. # - Yet more fiddling with the layout.
  1368. #
  1369. # Revision 1.4  1995/05/31  23:47:11  fjc
  1370. # - Redesigned to reflect changes in preferences settings.
  1371. #
  1372. # Revision 1.3  1995/05/30  23:34:29  fjc
  1373. # - More fiddling with layout.
  1374. #
  1375. # Revision 1.2  1995/05/29  21:30:02  fjc
  1376. # - Moved EADialog declarations to EADialogs.
  1377. # - Numerous changes to the layout and presentation.
  1378. #
  1379. # Revision 1.1  1995/05/19  16:14:28  fjc
  1380. # Initial revision
  1381. #
  1382. *************************************************************************)
  1383.